﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;

namespace OrganaiserProgram
{

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            notifyIcon1.Icon = new Icon("MiniClock.ico");

            listView1.Columns.Add("Name", 65);
            listView1.Columns.Add("Description", 100);
            listView1.Columns.Add("Active", 70);
            listView1.Columns.Add("Lost", 42);
            listView1.Columns.Add("Date", 120);
            listView1.Columns.Add("Time", 70);
            editToolStripMenuItem.Enabled = false;
            deleteToolStripMenuItem.Enabled = false;
            ReloadList();
        }

        public void ReloadList()
        {
            listView1.Items.Clear();
            foreach (var es in DB.InfoList)
            {
                var listViewItem = new ListViewItem(es.EventName);
                listViewItem.Tag = es.Id; // <- ID is here
                listViewItem.SubItems.Add(es.EventDescription);
                var isActive = "Active";
                if (es.Active == false)
                {
                    isActive = "Not Active";
                }
                listViewItem.SubItems.Add(isActive);
                listViewItem.SubItems.Add(es.EventsFrequency);
                listViewItem.SubItems.Add(es.TargetDate);
                listViewItem.SubItems.Add(es.EventTime);

                editToolStripMenuItem.Enabled = false;
                deleteToolStripMenuItem.Enabled = false;

                for (int i = 0; i < DB.InfoList.Count; i++)
                {
                    if (textBox1.Text != "" && textBox1.Text != "Search...")
                    {
                        if (es.EventName.Contains(textBox1.Text.ToLower()))
                        {
                            listView1.Items.Add(listViewItem);
                            break;
                        }
                    }
                    else
                    {
                        listView1.Items.Add(listViewItem);
                        break;
                    }
                }
            }
        }

        private void addToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var EPF = new EditPersonInfo();
            EPF.ShowDialog(this);
        }

        private void textBox1_MouseHover(object sender, EventArgs e)
        {
            TextBox tb = sender as TextBox;

            if (tb.Text == "Search...")
            {
                tb.Text = "";
            }
        }

        private void textBox1_MouseLeave(object sender, EventArgs e)
        {
            TextBox tb = sender as TextBox;

            if (tb.Text == "")
            {
                tb.Text = "Search...";
            }
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            ReloadList();
        }

        private void textBox1_MouseClick(object sender, MouseEventArgs e)
        {
            TextBox tb = sender as TextBox;

            if (tb.Text == "Search...")
            {
                tb.Text = "";
            }
        }

        private void eventsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (listView1.FocusedItem == null)
            {
                editToolStripMenuItem.Enabled = false;
                deleteToolStripMenuItem.Enabled = false;
            }
            else
            {
                editToolStripMenuItem.Enabled = true;
                deleteToolStripMenuItem.Enabled = true;
            }
        }

        private void editToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (listView1.SelectedItems.Count == 0) return;
            var selectedRow = listView1.SelectedItems[0];

            if (selectedRow != null)
            {
                for (int i = 0; i < DB.InfoList.Count; i++)
                {
                    EqualaiserSet info = DB.InfoList[i];

                    if (info.Id.Equals(selectedRow.Tag))
                    {
                        var editEvent = new EditPersonInfo(info.Id);
                        editEvent.ShowDialog(this);
                        break;
                    }
                }
            }
        }

        private void deleteToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (listView1.SelectedItems.Count == 0) return;
            var selectedRow = listView1.SelectedItems[0];   //

            if (selectedRow != null)
            {
                for (int i = 0; i < DB.InfoList.Count; i++)
                {
                    EqualaiserSet info = DB.InfoList[i];

                    if (info.Id.Equals(selectedRow.Tag))
                    {
                        DB.InfoList.Remove(info);
                        editToolStripMenuItem.Enabled = false;
                        deleteToolStripMenuItem.Enabled = false;
                        break;
                    }
                }
            }
            ReloadList();
        }

        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                Show();
                WindowState = FormWindowState.Normal;
                notifyIcon1.Visible = false;
            }
        }

        private void Form1_Resize(object sender, EventArgs e)
        {
            if (WindowState == FormWindowState.Minimized)
            {
                Hide();
                notifyIcon1.Visible = true;
            }
        }

        private void soundMessageToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (listView1.SelectedItems.Count == 0) return;
            var selectedRow = listView1.SelectedItems[0];

            if (selectedRow != null)
            {
                for (int i = 0; i < DB.InfoList.Count; i++)
                {
                    EqualaiserSet info = DB.InfoList[i];

                    if (info.Id.Equals(selectedRow.Tag))
                    {
                        DialogResult dr = MessageBox.Show("If u want add sound at Event - Click \"Да\"", "Sound", MessageBoxButtons.YesNo);
                        {
                            if(dr == DialogResult.Yes)
                            {
                                EditPersonInfo ep = new EditPersonInfo();
                                ep.AddSimpleMusic(info.Id);
                            }
                            else if (dr == DialogResult.No)
                            {
                                return;
                            }

                        }
                    }
                }
            }
        }

        private void textMessageToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (listView1.SelectedItems.Count == 0) return;
            var selectedRow = listView1.SelectedItems[0];

            if (selectedRow != null)
            {
                for (int i = 0; i < DB.InfoList.Count; i++)
                {
                    EqualaiserSet info = DB.InfoList[i];

                    if (info.Id.Equals(selectedRow.Tag))
                    {
                        EditPersonInfo ep = new EditPersonInfo();
                        ep.AddSomeText(info.Id);
                    }
                }
            }
        }

        private void comboBox1_MouseClick(object sender, MouseEventArgs e)
        {
            ComboBox box = new ComboBox();
            if (box.DataSource.Equals("Day")) MessageBox.Show("LAL");
            //foreach(var item in comboBox1.Items)
            //{
            //    // Тут записываем item в файл
            //    MessageBox.Show(Convert.ToString(item));
            //}
        }
    }
}



/*
 *  Тулбокс для меню (добавить менюстрип). свойство чекед = тру.
 *  Окно - Меню, событие | настройки. 
 *  Ниже ListView в котором будет все происходить.
 *  Заголовок в листвиев. справа текстбокс с поиском.
 *  ниже контроллмонскалендар.
 *  ниже комбобокс выбора периода.
 *  1. Сварачиваться в трей программа должна.
 *  2. В меню события - добавить, изменить и удалить, выход. (адд, едит, дел) введет к диалоговым окнам Имя Описание Время срабатывания, активно оно или нет, переодичность (Name, Discription, Time, Active, Period(каждую неделю оповещение или же каждый час)).
 *  3. Настройки - текстовое оповещение, звуковые оповещения, период напоминания. два чекббокса и диалоговое окно.
 *  период напоминания - маленькая форма стрекбаром. 1м - час. за сколько минут до наступления события будет напоминание отображаться.
 *  
 * комбобокс будет фильтровать наше отображение событий в листвьюв. сутки, неделя, месяц. 
 * в строке поиска - текстбокс. на текст бокс повесить текстченжед (там уже проверка текста) и в нем обрабатывать, имени и дискрип (контейнс).
 * календарь - выбираем нужную дату и в листвьв появляются события за определенную дату.
 * 
 * над листвьв, написать заголовок события, описание время, дату.
 * 
 * Добавление события.
 * Текст бокс - имя, описание события
 * чекбокс - активно оно или нет. 
 * комбобокс - переодичности события. (день, неделя, месяц).
 * datetimepicker - дата и время.
 * и на этойц же дочерней форме две кнопки - адд, канцел.
 * редактирование - тоже самое только с заполненными полями данных.
 * удаление - обычный месадж бокс, уес или но. и удаляем.
 * 
 * сериализация - нужно чтобы проекты сохраниись.
 * сеарилизуем лист с событиями.
 * 
 * на пятерочку: ппц.
 * при загрузке и выгрузке сериализовался наш список событий.
 * добавление, корректно.
 * редактировани
 * удаление.
 * алгоритм посика.
 * 
 * период напоминания там трекбар который нужно настроить как отдельная форма за сколько нужно предупредить пользователя.
 * при неактивном событии можно его активировать. в 1 форме в листбоксе.
 * 
 * class SoundNotify:System.Media.SoundPlayer
 * {
 *      public SoundNotidy():Base("....ogg:")
 *      {
 *          load();
 *      }
 * }
 * 
 * soundNotify s = new Soundnotify();
 * s.playloop();
 * s.stop();
*/